home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-06 / ipxstuff.zip / RKIPX.H < prev    next >
C/C++ Source or Header  |  1993-03-09  |  10KB  |  291 lines

  1. /*********************************************************************/
  2. /*********************************************************************/
  3. /*        IPX/SPX PROTOCOL APPLICATIONS PROGRAMMING INTERFACE        */
  4. /*********************************************************************/
  5. /*********************************************************************/
  6.  
  7. #ifndef IPXUSER
  8. #define IPXUSER
  9.  
  10. #include <time.h>
  11.  
  12. /* ********************************************************************** */
  13. /* ********************************************************************** */
  14.  
  15. /* ================================================================= */
  16. /* ================================================================= */
  17. /* constants */
  18. /* ================================================================= */
  19. /* ================================================================= */
  20.  
  21. /* ------------- */
  22. /* MISCELLANEOUS */
  23. /* ------------- */
  24.  
  25. #define BYTE            unsigned char
  26.  
  27. #define TRUE            1
  28. #define SEGSIZE         65536L
  29. #define ESCAPE_KEY      0x1B
  30. #define RSHIFT_KEY_MASK 0x01
  31. #define LSHIFT_KEY_MASK 0x02
  32. #define CTRL_KEY_MASK   0x04
  33. #define ALT_KEY_MASK    0x08
  34. #define KEYB_FLAGS      0x00400017
  35. #define FILE_PROBLEM    -1
  36.  
  37. #define SEQLEN          1
  38. #define MINIPXDATALEN   512
  39. #define MAXIPXDATALEN   4096
  40. #define ACKSTR          "ACK"
  41. #define FIRST_SEQ_NUM   1
  42.  
  43. #define IPX_TIMEOUT     1   // # secs to wait before retry
  44. #define IPX_TRIES       5   // # times to try RX/TX before quitting
  45.  
  46. /* ------------------------------------- */
  47. /* IPX/SPX COMMANDS, CODES, & PARAMETERS */
  48. /* ------------------------------------- */
  49.  
  50. /* packet types */
  51. #define UNKNOWN_PACKET_TYPE             0x00
  52. #define ROUTING_INFO_PACKET_TYPE        0x01
  53. #define ECHO_PACKET_TYPE                0x02
  54. #define ERROR_PACKET_TYPE               0x03
  55. #define IPX_PACKET_TYPE                 0x04
  56. #define SPX_PACKET_TYPE                 0x05
  57.  
  58. /* ipx presence detection */
  59. #define IPX_PRESENT                     0xFF
  60. #define IPX_MULTIPLEX                   0x7A00
  61. #define DOS_MULTIPLEX_VECTOR            0x2F
  62.  
  63. /* ipx API commands */
  64. #define SOCKET_OPEN                     0x0000
  65. #define SOCKET_CLOSE                    0x0001
  66. #define GET_LOCAL_TARGET                0x0002
  67. #define SEND_PACKET                     0x0003
  68. #define LISTEN_FOR_PACKET               0x0004
  69. #define SCHEDULE_EVENT                  0x0005
  70. #define CANCEL_EVENT                    0x0006
  71. #define GET_INTERVAL_MARKER             0x0008
  72. #define GET_INTERNETWORK_ADDR           0x0009
  73. #define RELINQUISH_CONTROL              0x000A
  74. #define DISCONNECT_FROM_TARGET          0x000B
  75.  
  76. /* ---------------- */
  77. /* input parameters */
  78. /* ---------------- */
  79.  
  80. /* socket parameters */
  81. #define SOCKET_DYNAMIC_ASSIGN           0x00
  82. #define SOCKET_SHORT_LIVED              0x00
  83. #define SOCKET_LONG_LIVED               0xFF
  84.  
  85. /* ---------------- */
  86. /* IPX return codes */
  87. /* ---------------- */
  88.  
  89. /* generic */
  90. #define IPX_SUCCESS                     0x00
  91.  
  92. #define EVENT_CANCELED                  0xFC
  93. #define FRAGMENT_SIZE_ERROR             0xFD
  94.  
  95. /* IPXSocketOpen() */
  96. #define SOCKET_TABLE_FULL               0xFE
  97. #define SOCKET_ALREADY_OPEN             0xFF
  98.  
  99. /* IPXGetInternetworkAddress() */
  100. #define DEST_NODE_PATH_NOT_FND          0xFA
  101.  
  102. /* IPXListenForPacket() */
  103. #define ECB_SOCKET_NOT_OPEN             0xFF
  104.  
  105. /* IPXSendPacket() */
  106. #define DESTINATION_NOT_FOUND           0xFE
  107. #define NETWORK_FAILURE                 0xFF
  108.  
  109. /* IPXCancelEvent() */
  110. #define CANNOT_CANCEL_ECB               0xF9
  111. #define ECB_NOT_IN_USE                  0xFF
  112.  
  113. /* ------------------------------- */
  114. /* "Insulation Layer" Return Codes */
  115. /* ------------------------------- */
  116.  
  117. #define GOOD_IPX_RETURN                 0x00
  118.  
  119. #define USER_TERMINATED                 0xBB
  120. #define IPX_NOT_PRESENT                 0xDD
  121. #define BAD_MEMORY_ALLOC                0xEE
  122.  
  123. #define BAD_LOCAL_TARGET                0x10
  124. #define BAD_SOCKET_PARAM                0x11
  125. #define BAD_SOCKET_OPEN                 0x12
  126.  
  127. #define BAD_TX_TRY                      0x20
  128. #define BAD_RETRIES                     0x21
  129. #define BAD_RX_SEQ_NUM                  0x22
  130. #define BAD_RX_SRCE_ADDR                0x23
  131.  
  132. #define BAD_FILE_OPEN                   0x30
  133. #define BAD_FILE_WRITE                  0x31
  134. #define BAD_FILE_READ                   0x32
  135.  
  136. #define BAD_RX_BFR_LEN                  0x40
  137.  
  138. /* ================================================================= */
  139. /* ================================================================= */
  140. /* macros */
  141. /* ================================================================= */
  142. /* ================================================================= */
  143.  
  144. #define HILOSWAP( x )       ((x << 8) + (x >> 8))
  145. #define CTRLHIT             ( *(BYTE far *)KEYB_FLAGS & CTRL_KEY_MASK )
  146. #define ALTHIT              ( *(BYTE far *)KEYB_FLAGS & ALT_KEY_MASK )
  147. #define RSHIFTHIT           ( *(BYTE far *)KEYB_FLAGS & RSHIFT_KEY_MASK )
  148. #define LSHIFTHIT           ( *(BYTE far *)KEYB_FLAGS & LSHIFT_KEY_MASK )
  149. #define USERBREAK           ( RSHIFTHIT && LSHIFTHIT && ALTHIT )
  150. #define SAFEACOPY( x, y )   x[0] = '\0', strncat( x, y, sizeof(x)-1 )
  151.  
  152. /* ================================================================= */
  153. /* ================================================================= */
  154. /* structures                                                        */
  155. /* ================================================================= */
  156. /* ================================================================= */
  157.  
  158. /* -------------- */
  159. /* sub-structures */
  160. /* -------------- */
  161.  
  162. typedef struct
  163. {
  164. BYTE   Network[4];
  165. BYTE   Node[6];
  166. } INTNETADDR;
  167.  
  168. typedef struct
  169. {
  170. INTNETADDR  INA;
  171. BYTE        ImmediateAddr[6];
  172. } LOCALTARGET;
  173.  
  174. typedef struct
  175. {
  176. INTNETADDR  INA;
  177. BYTE        Socket[2];
  178. } NETADDR;
  179.  
  180. typedef struct
  181. {
  182. void far  *BufAddr;
  183. unsigned  Len;
  184. } ECBFRAGMENT;
  185.  
  186. /* ----------------- */
  187. /* IPX PACKET HEADER */
  188. /* ----------------- */
  189.  
  190. typedef struct
  191. {
  192. unsigned  Chksum;
  193. unsigned  Len;             /* hi/lo */
  194. BYTE      TransportCtrl;
  195. BYTE      PacketType;
  196. NETADDR   DestAddr;
  197. NETADDR   SrceAddr;
  198. } IPXHEADER;
  199.  
  200. /* ------------------- */
  201. /* EVENT CONTROL BLOCK */
  202. /* ------------------- */
  203.  
  204. typedef struct
  205. {
  206. void far     *LinkAddr;
  207. void far     (*ESR)(void);
  208. BYTE         InUse;
  209. BYTE         CompletionCode;
  210. BYTE         Socket[2];
  211. BYTE         IPXWorkspace[4];
  212. BYTE         DriverWorkspace[12];
  213. BYTE         ImmediateAddr[6];
  214. unsigned     FragmentCnt;
  215. ECBFRAGMENT  Fragment[2];
  216. } EVENTCONTROLBLOCK;
  217.  
  218. /* ================================================================= */
  219. /* ================================================================= */
  220. /* function prototypes                                               */
  221. /* ================================================================= */
  222. /* ================================================================= */
  223.  
  224. /* --------------------------- */
  225. /* low-level IPX API functions */
  226. /* --------------------------- */
  227.  
  228. unsigned IPXInstalled( void );
  229. unsigned IPXSocketOpen( BYTE *socket, BYTE longevity );
  230. void     IPXSocketClose( BYTE *socket );
  231. void     IPXSendPacket( EVENTCONTROLBLOCK *ecb );
  232. void     IPXListenForPacket( EVENTCONTROLBLOCK *ecb );
  233. void     IPXGetInternetworkAddress( INTNETADDR *ina );
  234. void     IPXRelinquishControl( void );
  235. void     IPXDisconnectFromTarget( NETADDR *naddr );
  236. unsigned IPXCancelEvent( EVENTCONTROLBLOCK *ecb );
  237. void     IPXScheduleEvent( EVENTCONTROLBLOCK *ecb, unsigned delay );
  238. unsigned IPXGetIntervalMarker( void );
  239. unsigned IPXGetLocalTarget( LOCALTARGET *lt );
  240.  
  241. /* -------------------------- */
  242. /* Internal Utility functions */
  243. /* -------------------------- */
  244.  
  245. int IPXTimeOutRT( EVENTCONTROLBLOCK *ecb,
  246.                   time_t delay,
  247.                   void (*RTfunc)(void) );
  248. int  xatoxb( BYTE *d, char *s );
  249. void xantoxb( BYTE *d, char *s, unsigned len );
  250. void ShowECB( EVENTCONTROLBLOCK *ecb );
  251. void ShowIPXPacket( IPXHEADER *ipxhdr );
  252.  
  253. /* ---------------------------------------------- */
  254. /* High-Level Application IPX Interface functions */
  255. /* ---------------------------------------------- */
  256.  
  257. unsigned IPXReceiveRT( long *BfrLen,
  258.                        BYTE *FileOrBfr,
  259.                        char *SocketStr,
  260.                        void (*RTfunc)(void) );
  261.  
  262. unsigned IPXSendRT( long     *BfrLen,
  263.                     BYTE     *FileOrBfr,
  264.                     char     *SocketStr,
  265.                     NETADDR  *Destination,
  266.                     void     (*RTfunc)(void) );
  267.  
  268. /* ================================================================= */
  269. /* ================================================================= */
  270. /* globals                                                           */
  271. /* ================================================================= */
  272. /* ================================================================= */
  273.  
  274. /*
  275. NOTE: These globals default to the constants listed within RKIPX.H,
  276.       but can be changed by the application that employs them.
  277. */
  278.  
  279. extern unsigned IPXerrno;    // latest IPX function result code
  280. extern time_t   IPXto;       // # secs to wait for IPX command completion
  281. extern unsigned IPXtries;    // # times to try RX/TX in IPXSend/Receive()
  282. extern unsigned IPXdatalen;  // size of data buffer in IPX packet
  283.  
  284. /* ********************************************************************** */
  285. /* ********************************************************************** */
  286.  
  287. #endif
  288.  
  289. /************************************************************************/
  290. /* EOF  EOF  EOF  EOF  EOF  EOF  EOF  EOF  EOF  EOF  EOF  EOF  EOF  EOF */
  291. /************************************************************************/